package com.example.spindrift.Controllers;

import com.example.spindrift.models.SysFile;
import com.example.spindrift.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/File")
public class FileController {
    @Autowired
    private FileService fileService;

    /**
     * 获取所有文件信息
     * @return
     */
    @GetMapping("/getAllFile")
    public Object getAllFile() {
        return fileService.getAllFile();
    }

    /**
     * 文件上传
     * @param file 上传的文件信息
     * @return
     */
    @PostMapping("/fileUpload")
    public Object fileUpload(@RequestBody MultipartFile file){
        if(file != null){
            return fileService.saveFile(file);
        }
        return "文件信息数据保存失败";
    }

    /**
     * 根据文件类型获取文件信息
     * @param type 文件类型（image：图片文件,music：音乐文件,lrc：歌词文件，rates：其他文件）
     * @return
     */
    @GetMapping("/getFileByType")
    public List<SysFile> getFileByType(@RequestParam String type){
        if(type != null){
            return fileService.getFileByType(type);
        }
        return null;
    }

    /**
     * 根据文件名称搜索文件信息（模糊匹配）
     * @param keyword 搜索关键字
     * @return
     */
    @GetMapping("/searchFile")
    public List<SysFile> searchFile(@RequestParam String keyword){
        if(keyword != null && !keyword.equals("")){
            return fileService.searchFile(keyword);
        }else if(keyword.equals("")){
            return fileService.getAllFile();
        }
        return null;
    }

    /**
     * 根据文件名称获取文件信息（全拼匹配）
     * @param fileName
     * @return
     */
    @GetMapping("/getFileByName")
    public List<SysFile> getFileByName(@RequestParam String fileName){
        if(fileName != null && !fileName.equals("")){
            return fileService.getFileByName(fileName);
        }else if(fileName.equals("")){
            return fileService.getAllFile();
        }
        return null;
    }

    /**
     * 根据文件ID获取文件信息
     * @param fileId 文件ID
     * @return
     */
    @GetMapping("/getFileById")
    public SysFile getFileById(@RequestParam Integer fileId){
        if(fileId != null){
            return fileService.getFileById(fileId);
        }
        return null;
    }

    /**
     * 添加一条文件信息
     * @param file 文件信息
     * @return
     */
    @PostMapping("/insertFile")
    public Boolean insertFile(@RequestBody SysFile file){
        if(file != null){
            return fileService.insertFile(file) > 0;
        }
        return false;
    }

    /**
     * 更新一条文件信息
     * @param file 文件信息
     * @return
     */
    @PutMapping("/updateFile")
    public Boolean updateFile(@RequestBody SysFile file){
        if(file != null){
            return fileService.updateFile(file) > 0;
        }
        return false;
    }

    /**
     * 删除一条文件信息
     * @param fileId 文件ID
     * @return
     */
    @DeleteMapping("/deleteFile")
    public Boolean deleteFile(@RequestParam Integer fileId){
        if(fileId != null){
            return fileService.deleteFile(fileId) > 0;
        }
        return false;
    }

    /**
     * 保存音乐文件
     * @param music 音乐文件
     * @return
     */
    @PostMapping("/saveMusic")
    public HashMap<String, Object> saveMusic(@RequestBody MultipartFile music){
        return fileService.saveMusic(music);
    }
}
